#include <dretve.h>
#include <ispis.h>
#include <vrijeme.h>

#define BRDRETVI 3
static int b;

static void dretva(void *x)
{
	int i, id = id_dretve();
	vrijeme_t koliko;

	koliko.sekunde = id;
	koliko.nsekunde = 0;
	
	ispisi("Dretva %d pocetak\n", id);

#define NN 3
	for (i = 0; i < NN; i++) {
		spavaj(koliko);
		ispisi("Dretva %d, na barijeri = %d\n", id, i + 1);

		cekaj_na_barijeri(b);

		ispisi("Dretva %d, prolazi barijeru = %d\n", id, i + 1);
		spavaj(koliko);
	}
#undef NN

	ispisi("Dretva %d zavrsava\n", id);
}

void test_barijera()
{
	ispisi("\n[%s:%s:%d]\n", __FILE__, __FUNCTION__, __LINE__);

	int dr[BRDRETVI], i;
	
	b = dohvati_barijeru(BRDRETVI);
	if (b == -1) {
		ispisi("nema barijere!\n");
		return;
	}

	for (i = 0; i < BRDRETVI; i++) {
		dr[i] = stvori_dretvu(dretva, NULL);
		if (dr[i] == -1)
			break;
	}

	for (i = i - 1; i >= 0; i--)
		cekaj_kraj_dretve(dr[i]);
	
	obrisi_sinkro(b);
}
